using System;
using System.Collections.Generic;
using System.Text;

using System.Data.Common;

using MakeIT.Framework.Data;
using MakeIT.SGI.ERP.Entidades;

namespace MakeIT.SGI.ERP.Negocios
{
	public partial class SgiDAOT : DAOT
	{

		public AgendatipoVO getAgendatipo(int? idAgendaTipo, string agendaTipo)
		{
			AgendatipoVO agendatipoVO = null;
			List<AgendatipoVO> listAgendatipoVOs = getAgendatipos(idAgendaTipo, agendaTipo, null);
			if (listAgendatipoVOs != null && listAgendatipoVOs.Count > 0)
			{
				agendatipoVO = listAgendatipoVOs[0];
			}
			return agendatipoVO;
		}

		public AgendatipoVO getAgendatipo(int? idAgendaTipo)
		{
			return getAgendatipo(idAgendaTipo, null);
		}

		public List<AgendatipoVO> getAgendatipos()
		{
			return getAgendatipos(null, null, null);
		}

		public List<AgendatipoVO> getAgendatipos(int? idAgendaTipo)
		{
			return getAgendatipos(idAgendaTipo, null, null);
		}

		public List<AgendatipoVO> getAgendatipos(int? idAgendaTipo, string agendaTipo)
		{
			return getAgendatipos(idAgendaTipo, agendaTipo, null);
		}

		public List<AgendatipoVO> getAgendatipos(int? idAgendaTipo, string agendaTipo, int? idFilial)
		{
			string where = "WHERE ";
			StringBuilder query = new StringBuilder();

			query.AppendLine("SELECT agt.idAgendaTipo as agt_idAgendaTipo, agt.agendaTipo as agt_agendaTipo, agt.idFilial as agt_idFilial, fil.filial as fil_filial, agt.cadastro as agt_cadastro, agt.cadastradoPor as agt_cadastradoPor, agt.edicao as agt_edicao, agt.editadoPor as agt_editadoPor  ");
			query.AppendLine("FROM agendatipo as agt LEFT OUTER JOIN filial as fil on agt.idFilial=fil.idFilial  ");
			if (idAgendaTipo != null)
			{
				query.AppendLine(where + "agt.idAgendaTipo=@idAgendaTipo ");
				where = "AND ";
			}
			if (agendaTipo != null)
			{
				query.AppendLine(where + "agt.agendaTipo LIKE @agendaTipo ");
				where = "AND ";
			}
			if (idFilial != null)
			{
				query.AppendLine(where + "agt.idFilial=@idFilial ");
				where = "AND ";
			}


			query.AppendLine("ORDER BY agt.agendaTipo ");

			DbCommand cmd = this.getCommand();
			cmd.CommandText = query.ToString();

			if (idAgendaTipo!= null) cmd.Parameters.Add(getParameter(cmd, "@idAgendaTipo", idAgendaTipo));
			if (agendaTipo!= null) cmd.Parameters.Add(getParameter(cmd, "@agendaTipo", "%"+agendaTipo+"%"));
			if (idFilial!= null) cmd.Parameters.Add(getParameter(cmd, "@idFilial", idFilial));


			DbDataReader reader = null;
			try
			{
				reader = cmd.ExecuteReader();

				List<AgendatipoVO> listAgendatipo = new List<AgendatipoVO>();

				while (reader.Read())
				{
					AgendatipoVO agendatipoVO = AgendatipoVO.CreateVO();
					agendatipoVO.idAgendaTipo = reader.GetInt32(reader.GetOrdinal("agt_idAgendaTipo"));
					agendatipoVO.agendaTipo = reader.GetString(reader.GetOrdinal("agt_agendaTipo"));
					agendatipoVO.idFilial = reader.GetInt32(reader.GetOrdinal("agt_idFilial"));
					if (!reader.IsDBNull(reader.GetOrdinal("fil_filial")))
						agendatipoVO.idFilialVO.filial = reader.GetString(reader.GetOrdinal("fil_filial"));
					agendatipoVO.cadastro = reader.GetDateTime(reader.GetOrdinal("agt_cadastro"));
					agendatipoVO.cadastradoPor = reader.GetString(reader.GetOrdinal("agt_cadastradoPor"));
					agendatipoVO.edicao = reader.GetDateTime(reader.GetOrdinal("agt_edicao"));
					agendatipoVO.editadoPor = reader.GetString(reader.GetOrdinal("agt_editadoPor"));


					listAgendatipo.Add(agendatipoVO);
				}
				reader.Close();
				return listAgendatipo;
			}
			catch (Exception ex) { throw ex; }
			finally
			{
				if (reader != null && !reader.IsClosed)
					reader.Close();
			}
		}

		public void setAgendatipo(AgendatipoVO agendatipoVO)
		{
			StringBuilder query = new StringBuilder();

			query.AppendLine("UPDATE agendatipo ");
			query.AppendLine("SET agendaTipo=@agendaTipo, idFilial=@idFilial,  cadastro=@cadastro, cadastradoPor=@cadastradoPor, edicao=@edicao, editadoPor=@editadoPor ");
			query.AppendLine("WHERE idAgendaTipo=@idAgendaTipo ");

			DbCommand cmd = this.getCommand();
			cmd.CommandText = query.ToString();

			cmd.Parameters.Add(getParameter(cmd, "@idAgendaTipo", agendatipoVO.idAgendaTipo));
			cmd.Parameters.Add(getParameter(cmd, "@agendaTipo", agendatipoVO.agendaTipo));
			cmd.Parameters.Add(getParameter(cmd, "@idFilial", agendatipoVO.idFilial));
			cmd.Parameters.Add(getParameter(cmd, "@cadastro", agendatipoVO.cadastro));
			cmd.Parameters.Add(getParameter(cmd, "@cadastradoPor", agendatipoVO.cadastradoPor));
			cmd.Parameters.Add(getParameter(cmd, "@edicao", agendatipoVO.edicao));
			cmd.Parameters.Add(getParameter(cmd, "@editadoPor", agendatipoVO.editadoPor));

			try
			{
				cmd.ExecuteNonQuery();
			}
			catch (Exception ex) { throw ex; }

		}

		public long newAgendatipo(AgendatipoVO agendatipoVO)
		{
			StringBuilder query = new StringBuilder();

			query.AppendLine("INSERT INTO agendatipo ");
			query.AppendLine("  ( agendaTipo, idFilial, cadastro, cadastradoPor, edicao, editadoPor ) ");
			query.AppendLine("VALUES ( @agendaTipo, @idFilial, @cadastro, @cadastradoPor, @edicao, @editadoPor ) ");

			DbCommand cmd = this.getCommand();
			cmd.CommandText = query.ToString();

			cmd.Parameters.Add(getParameter(cmd, "@agendaTipo", agendatipoVO.agendaTipo));
			cmd.Parameters.Add(getParameter(cmd, "@idFilial", agendatipoVO.idFilial));
			cmd.Parameters.Add(getParameter(cmd, "@cadastro", agendatipoVO.cadastro));
			cmd.Parameters.Add(getParameter(cmd, "@cadastradoPor", agendatipoVO.cadastradoPor));
			cmd.Parameters.Add(getParameter(cmd, "@edicao", agendatipoVO.edicao));
			cmd.Parameters.Add(getParameter(cmd, "@editadoPor", agendatipoVO.editadoPor));


			try
			{
				cmd.ExecuteNonQuery();

				long newID = 0;
				if (tipo.Equals(DBType.MSSql))
				{
					cmd.CommandText = "SELECT IDENT_CURRENT('agendatipo') AS 'Identity' ";
					DbDataReader reader = cmd.ExecuteReader();
					reader.Read();
					newID = (long)reader.GetDecimal(reader.GetOrdinal("Identity"));
					reader.Close();
				}
				else if (tipo.Equals(DBType.MySql))
				{
					newID = ((MySql.Data.MySqlClient.MySqlCommand)cmd).LastInsertedId;
				}
				else if (tipo.Equals(DBType.ODBC))
				{
					//TODO implementar
				}
				else if (tipo.Equals(DBType.ORACLE))
				{
					//TODO implementar
				}
				return newID;
			}
			catch (Exception ex) { throw ex; }

		}

		public void delAgendatipo(AgendatipoVO agendatipoVO)
		{
			StringBuilder query = new StringBuilder();

			query.AppendLine("DELETE FROM agendatipo ");
			query.AppendLine("WHERE idAgendaTipo=@idAgendaTipo ");

			DbCommand cmd = getCommand();
			cmd.CommandText = query.ToString();

			cmd.Parameters.Add(getParameter(cmd, "@idAgendaTipo", agendatipoVO.idAgendaTipo));


			try
			{
				cmd.ExecuteNonQuery();
			}
			catch (Exception ex) { throw ex; }

		}
		public int getCountAgendatipoxIdFilial(int? idFilial)
		{
			StringBuilder query = new StringBuilder();

			query.AppendLine("SELECT COUNT(idFilial) as ocorrencias FROM agendatipo WHERE IdFilial=@IdFilial ");

			DbCommand cmd = this.getCommand();
			cmd.CommandText = query.ToString();

			cmd.Parameters.Add(getParameter(cmd, "@IdFilial", idFilial));

			DbDataReader reader = null;
			try
			{
				reader = cmd.ExecuteReader();
				reader.Read();

				int ocorrencias = 0;
				ocorrencias = reader.GetInt32(reader.GetOrdinal("ocorrencias"));
				reader.Close();
				return ocorrencias;
			}
			catch (Exception ex) { throw ex; }
			finally
			{
				if (reader != null && !reader.IsClosed)
					reader.Close();
			}
		}
	}
}
